package com.literature.search.file.service;

import com.literature.search.core.entity.FileDocument;
import com.literature.search.core.entity.R.AjaxJson;
import com.literature.search.core.entity.dto.BasePageDTO;
import com.literature.search.core.enums.FileEsStateEnum;
import org.springframework.web.multipart.MultipartFile;

import java.io.FileInputStream;
import java.util.List;
import java.util.Optional;

public interface IFileService {


    AjaxJson fileUpload(MultipartFile file);

    byte[] getFileBytes(String gridFsId);

    /**
     * 保存文件流到dfs系统中
     **/
    String uploadFileToGridFs(String filePrefix, FileInputStream inputStream, String contentType);

    /**
     * @Description // 更新文档状态
     **/
    void updateEsState(FileDocument fileDocument, FileEsStateEnum docState, String errorMsg);

    void updateFile(FileDocument fileDocument);


    /**
     * @Description // 删除GridFS系统中的文件
     **/
    void deleteGridFs(String ...id);

    /**
     * 根据md5获取文件对象
     */
    FileDocument getByMd5(String md5);

    /**
     * 分页查询，按上传时间降序
     */
    AjaxJson listFilesByPage(BasePageDTO pageParams);

    /**
     * 根据id获取文件
     */
    Optional<FileDocument> getById(String id);

    /**
     * @Description 查询是否在评审的文档
     * @Param [pageDTO, reviewing]
     **/
    List<FileDocument> queryFileDocument(BasePageDTO pageDTO, boolean reviewing);



    /**
     * @Description 查询文档评审的列表, 实际是查询文档的信息
     * @Param [page, user]
     **/
    AjaxJson queryFileDocumentResult(BasePageDTO pageParams, boolean reviewing);


    /**
     * @Description 文档查询并通过文档审批
     * @Param [fileId]
     **/
    List<FileDocument> queryAndUpdate(String ...fileId);

    /**
     * 删除文件
     */

    Boolean removeFile(String fileId, boolean isDeleteFile);


    /**
     * @Description // 查询缩略图信息
     * @param thumbId String
     **/
    byte[] getFileThumb(String thumbId);

    FileDocument queryById(String fileId);


    AjaxJson rebuildIndex(String fileId);

    /**
     * @Description // 更新文件的下载量
     * @param
     **/
    void updateDownloadCount();

    /**
     * @Description // 更新文件的浏览量
     * @param
     **/
    void updateViewCount();

    /**
     * @Description // 更新文件的喜欢数
     * @param
     **/
    void updateLikeCount();

    /**
     * @Description // 更新文件的收藏数
     * @param
     **/
    void updateCollectCount();

    /**
     * @Description 根据ids,将mongo中的文件更新到es中
     */

    int updateFileToEs(List<String> ids);
}
